package com.xiaolun.threadPools;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MyThreadPoolDemo01 {
	public static void main(String[] args) {
		/**
		 * 1、创建线程池的方式，使用工具类Executors（Fixed：固定的）
		 * 2、一个线程池中有5个受理（工作）线程（已经new好了），
		 * 类似一个银行有5个受理窗口。
		 * 3、主要是 ThreadPoolExecutor,我们拿到这个类就可以获得池子。
		 */
//		ExecutorService threadPool = Executors.newFixedThreadPool(5);
		//一池1个工作线程，类似一个银行有1个受理窗口。 pool-1-thread-1	办理业务
//		ExecutorService threadPool = Executors.newSingleThreadExecutor();
		//一池N线程，可扩容，可伸缩。
		ExecutorService threadPool = Executors.newCachedThreadPool();

		try {
			/**
			 * 1、模拟有10个顾客过来银行办理业务（此时会有10个请求），
			 * 目前池子中有5个工作人员提供服务。
			 * 2、控制台输出：pool-1-thread-1	办理业务
			 * 线程可以被复用。（只要有线程用完了，被释放，可以再次使用）
			 */
			for (int i = 1; i <= 10; i++) {
				threadPool.execute(() -> {
					System.out.println(Thread.currentThread().getName() + "\t办理业务");
				});
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			threadPool.shutdown(); //线程池用完了之后要关闭
		}
	}
}
